package com.xyoto.community.controller;

import com.xyoto.community.aspect.annotation.RequiresLogin;
import com.xyoto.community.dto.GetUserDynamicListDTO;
import com.xyoto.community.dto.PageDTO;
import com.xyoto.community.dto.UpdateUserInfoDTO;
import com.xyoto.community.dto.UploadAvatarDTO;
import com.xyoto.community.service.UserService;
import com.xyoto.community.utils.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * ClassName:   用户前台管理Web接口
 * Author:      挽风
 * Date:        2020
 * Copyright:   2020 by 挽风1.0版本
 * Description:
 **/

@RestController
@RequestMapping("/user")
@Api(value = "UserController", tags = "用户前台接口")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 分页获取我关注的用户信息列表
     *
     * @param pageDTO 分页Query封装
     * @return List
     */
    @RequiresLogin
    @ApiOperation(value = "获取我关注的用户信息列表", notes = "获取我关注的用户信息列表", httpMethod = "GET")
    @GetMapping("/getFollowList")
    public Result getMyFollowList(@Valid PageDTO pageDTO) {
        return userService.getMyFollowList(pageDTO);
    }

    /**
     * 根据用户id获取用户详情信息
     *
     * @param userId 需要查询的用户id
     * @return 用户详情信息
     */
    @ApiOperation(value = "根据用户id获取用户详情", notes = "根据用户id获取用户详情", httpMethod = "GET")
    @GetMapping("/getUserInfoByUserId")
    public Result getUserDetailsById(@RequestParam(value = "userId", name = "userId") Integer userId) {
        return userService.getUserDetailsById(userId);
    }

    /**
     * 修改用户头像
     *
     * @param uploadAvatarDTO
     * @return
     */
    @RequiresLogin
    @ApiOperation("修改用户头像")
    @PostMapping("/uploadAvatarUrl")
    public Result updateMyAvatar(UploadAvatarDTO uploadAvatarDTO) {
        return userService.updateMyAvatar(uploadAvatarDTO.getMultipartFile());
    }

//    /**
//     * 修改用户昵称
//     *
//     * @param nickname 昵称
//     * @return
//     */
//    @RequiresLogin
//    @ApiOperation("修改用户昵称")
//    @PutMapping("/update/nickname")
//    public Result updateMyNickname(@RequestParam(name = "nickname")
//                                   @ApiParam(name = "nickname", value = "昵称") String nickname) {
//        return userService.updateMyNickname(nickname);
//    }

//    /**
//     * 修改用户性别
//     *
//     * @param gender 1男2女
//     * @return
//     */
//    @RequiresLogin
//    @ApiOperation("修改用户性别")
//    @PutMapping("/update/gender")
//    public Result updateGender(@RequestParam(name = "gender")
//                               @ApiParam(name = "gender", value = "性别：1男，2女") Short gender) {
//        return userService.updateGender(gender);
//    }

//    /**
//     * 修改用户个性签名
//     *
//     * @param signature 个性签名
//     * @return
//     */
//    @RequiresLogin
//    @ApiOperation("修改用户个性签名")
//    @PutMapping("/update/signature")
//    public Result updateMySignature(@RequestParam(name = "signature",required = false)
//                                    @ApiParam(name = "signature", value = "个性签名") String signature) {
//        return userService.updateMySignature(signature);
//    }

    @RequiresLogin
    @ApiOperation("获取我关注的话题")
    @GetMapping("/getMyFollowTopicList")
    public Result getMyFollowTopicList(@Valid PageDTO pageDTO) {
        return userService.getMyFollowTopicList(pageDTO);
    }

//    /**
//     * 修改用户出生日期
//     *
//     * @param birth 个性签名
//     * @return
//     */
//    @RequiresLogin
//    @ApiOperation("修改用户出生日期")
//    @PutMapping("/update/birth")
//    public Result updateMyBirth(@RequestParam(name = "birth")
//                                @ApiParam(name = "birth", value = "出生日期") String birth) {
//        return userService.updateMyBirth(birth);
//    }

//    /**
//     * 修改用户家乡
//     *
//     * @param homeTown 家乡城市
//     * @return
//     */
//    @RequiresLogin
//    @ApiOperation("修改用户家乡")
//    @PutMapping("/update/homeTown")
//    public Result updateHomeTown(@RequestParam(name = "homeTown")
//                                 @ApiParam(name = "homeTown", value = "家乡") String homeTown) {
//        return userService.updateMyHomeTown(homeTown);
//    }

    /**
     * 获取我的个人信息
     *
     * @return
     */
    @RequiresLogin
    @ApiOperation("获取我的个人信息")
    @GetMapping("getUserInfo")
    public Result getUserInfo() {
        return userService.getUserInfo();
    }

    /**
     * 获取用户的头像，昵称，个性签名，获赞数，粉丝数，关注数，排名
     *
     * @return
     */
    @ApiOperation("获取用户的头像，昵称，个性签名，获赞数，粉丝数，关注数，排名")
    @GetMapping("/my")
    public Result getMy() {
        return userService.getMy();
    }

    @ApiOperation("获取我的动态列表")
    @GetMapping("/getMyDynamicListByUserId")
    public Result getMyDynamicListByUserId(@Valid PageDTO pageDTO) {
        return userService.getMyDynamicListByUserId(pageDTO);
    }

    @RequiresLogin
    @ApiOperation("获取用户的动态列表")
    @GetMapping("/getUserDynamicListByUserId")
    public Result getUserDynamicListByUserId(@Validated GetUserDynamicListDTO getUserDynamicListDTO) {
        return userService.getUserDynamicListByUserId(getUserDynamicListDTO.getPageDTO(), getUserDynamicListDTO.getUserId());
    }

    @RequiresLogin
    @ApiOperation("获取我的粉丝列表")
    @GetMapping("/getMyFansList")
    public Result getMyFansList(@Valid PageDTO pageDTO) {
        return userService.getMyFansList(pageDTO);
    }

    @RequiresLogin
    @ApiOperation("获取我创建的话题列表")
    @GetMapping("/getMyCreateTopicList")
    public Result getMyCreateTopicList(@Valid PageDTO pageDTO) {
        return userService.getMyCreateTopicList(pageDTO);
    }

    @RequiresLogin
    @ApiOperation("修改用户的个人资料")
    @PostMapping("/update/userInfo")
    public Result updateUserInfo(@RequestBody UpdateUserInfoDTO updateUserInfoDTO){
        return userService.updateUserInfo(updateUserInfoDTO);
    }

    @RequiresLogin
    @ApiOperation("获取我的互动")
    @GetMapping("getMyInteractMessage")
    public Result getMyInteractMessage(@Valid PageDTO pageDTO){
        return userService.getMyInteractMessage(pageDTO);
    }

}
